Chargement des librairies

Attention select de mass (dépendance de mixOmics) prend le pas sur dplyr

Chargement des données brutes

Représentation des données

Etapes de Standardisation des données

standardisation par la médiane et mise à l’échelle par la plage inter-quartile

tNOESY <- t(NOESY)
log2_tNOESY <- log2(tNOESY)
log2_NOESY <- log2(NOESY)


###Standardisation par la médiane

stdr_medians <- apply(log2_tNOESY, 2, median)
series_median <- median(stdr_medians)

log2_NOESY_centered <- data.frame(matrix(
  nrow = nrow(log2_tNOESY),
  ncol = ncol(log2_tNOESY)))
colnames(log2_NOESY_centered) <- colnames(log2_tNOESY)
rownames(log2_NOESY_centered) <- rownames(log2_tNOESY)
for (j in 1:ncol(log2_tNOESY)) {
  log2_NOESY_centered[, j] <- log2_tNOESY[, j] - stdr_medians[j] + series_median
}

### Mise à l'échelle
sampleIQR <- apply(log2_NOESY_centered, 2, IQR)
seriesIQR <- median(sampleIQR)
scalingFactors <- sampleIQR / seriesIQR

NOESY_standard <- data.frame(matrix(
  nrow = nrow(log2_tNOESY),
  ncol = ncol(log2_tNOESY)))
colnames(NOESY_standard) <- colnames(log2_NOESY_centered)
rownames(NOESY_standard) <- rownames(log2_NOESY_centered)
for (j in 1:ncol(log2_NOESY_centered)) {
  NOESY_standard[, j] <- 
    (log2_tNOESY[, j] - stdr_medians[j] ) / scalingFactors[j] + series_median
}

par.ori <- par(no.readonly = TRUE)
par(mfrow = c(2, 2))
par(mar = c(5, 5, 2, 1))

#par(mar = c(5, 6, 4, 1)) ou 4 6 5 1

sample_size <- 30

## select sample indices
selected_samples <- sort(sample(
  x = 1:ncol(tNOESY), 
  size = sample_size,
  replace = FALSE))


boxplot(tNOESY[,selected_samples], 
        horizontal = TRUE,
        yaxt="n",
        las = 1, 
        main = "original values", 
        xlab = "value",
        ylab = "sample")


boxplot(log2_tNOESY[,selected_samples], 
        horizontal = TRUE, 
        yaxt="n",
        las = 1, 
        main = "log2-transformed", 
        xlab = "log2(value)",
        ylab = "sample")


boxplot(log2_NOESY_centered[,selected_samples], 
        horizontal = TRUE, 
        yaxt="n",
        las = 1,
        main = "Median-based centered", 
        xlab = "log2(value)",
        ylab = "sample")


boxplot(NOESY_standard[,selected_samples], 
        horizontal = TRUE, 
        las = 1,
        yaxt="n",
        main = "Standardized\n(median centering, IQR scaling)", 
        xlab = "log2(value)",
        ylab = "sample")

ACP via factominer

Poids des axes

Les 2 premiers axes expliquent plus de 46% de la variance exprimée.

Dendrogram

PCA issu du Package mixOmics

Juste pour montrer le code mais les résultats sont identiques. Remarque : Chaque axe est symétrique donc qu’un individu soit à-20ici et +20 avec factominer revient au même

Sparse PCA

Regarde si on peut observer naturellement une clusterisation en fonction d’une catégorie

Quelque soit la catégorie sexe, age tabac, nous n’observons aucune clusterisation.

Sparse PLS

Clusturisation par PLS-DA structure de correlation entre CPMG and NOESY variables séléctionné sur la composante 1

Cluster_CPMG_NOESY

Cluster_CPMG_NOESY

PLS-DA

Cercle de correlation PLS-DA

Ne sont représentés uniquement les buckets qui contribuent à au moins 50%

Test de prédiction

Possibilité de faire de la prédiction dans le cas ou les ind seraient en sous groupes, ce qui n’est pas notre cas.
ceci est juste un test mais pourrait être interressant afin de prédire une variable à partir de 100aines que nous avons

Contribution des variables PLS-DA

Les variables sélectionnées pour la composante 1 sont exprimées de manière positives pour le sexe1 et négative pour le sexe2.
Pour l’âge : la composante est positive pour les tranches d’âge de 50 à 69et négative pour les 20-29 ans.
Pour le statut tabagique la composante est exclusivement négatives pour le statut non et ex fumeur et positif pour les fumeurs.

Tabac

Chez les fumeurs la contribution des variables a un effet positif alors qu’elle est négative dans les 2 autres catégories.